package com.api.demo.service;

import com.api.demo.entity.User;

import java.util.List;

public interface FollowService {

    /**
     * 关注用户
     * 
     * @param followerId  关注者ID
     * @param followingId 被关注者ID
     * @return 是否成功
     */
    boolean follow(Long followerId, Long followingId);

    void notFollow(Long followerId, Long followingId);

    /**
     * 取消关注
     * 
     * @param followerId  关注者ID
     * @param followingId 被关注者ID
     * @return 是否成功
     */
    boolean unfollow(Long followerId, Long followingId);

    /**
     * 判断是否已关注
     * 
     * @param followerId  关注者ID
     * @param followingId 被关注者ID
     * @return 是否已关注
     */
    boolean isFollowing(Long followerId, Long followingId);

    /**
     * 获取关注数量
     * 
     * @param userId 用户ID
     * @return 关注数量
     */
    int getFollowingCount(Long userId);

    /**
     * 获取粉丝数量
     * 
     * @param userId 用户ID
     * @return 粉丝数量
     */
    int getFollowersCount(Long userId);

    /**
     * 获取关注的用户列表
     * 
     * @param userId 用户ID
     * @return 关注的用户列表
     */
    List<User> getFollowingUsers(Long userId);

    /**
     * 获取粉丝列表
     * 
     * @param userId 用户ID
     * @return 粉丝列表
     */
    List<User> getFollowers(Long userId);

    /**
     * 获取粉丝列表（带分页）
     * 
     * @param userId 用户ID
     * @param offset 偏移量
     * @param limit  每页数量
     * @return 粉丝列表
     */
    List<User> getFollowersWithPagination(Long userId, int offset, int limit);

    // 新增分页获取关注列表的方法
    List<User> getFollowingWithPagination(Long userId, int offset, int limit);
}